package com.shxy.cloudclassroom.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.shxy.cloudclassroom.entity.pojo.*;
import com.shxy.cloudclassroom.entity.vo.DownloadHistoryVO;
import com.shxy.cloudclassroom.entity.vo.ViewHistoryVO;
import com.shxy.cloudclassroom.entity.dto.UserDTO;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface UserService extends IService<User> {
    String checkUser(String username);
    void register(UserDTO user);
    User login(UserDTO userDTO, HttpSession session);

    void updateAdminById(Long userId);
    
    /**
     * 更新用户信息
     * @param user 用户信息
     * @param oldPassword 原密码
     * @param session 用户会话
     * @return 更新结果
     */
    Map<String, Object> updateUser(User user, String oldPassword, HttpSession session);
    
    /**
     * 上传用户头像
     * @param file 头像文件
     * @return 上传结果
     * @throws JsonProcessingException JSON处理异常
     */
    String uploadAvatar(MultipartFile file) throws JsonProcessingException;
    
    /**
     * 发送验证码
     * @param username 用户名
     * @param httpSession 会话
     * @return 验证码
     */
    String sendCode(String username, HttpSession httpSession);
    
    /**
     * 获取浏览历史
     * @param id 用户ID
     * @param learningResourceService 学习资源服务
     * @param viewHistoryService 浏览历史服务
     * @param majorService 专业服务
     * @return 浏览历史列表
     */
    List<ViewHistoryVO> getViewHistory(Long id, LearningResourceService learningResourceService, 
                                       ViewHistoryService viewHistoryService, MajorService majorService);
    
    /**
     * 获取下载历史
     * @param id 用户ID
     * @param learningResourceService 学习资源服务
     * @param downloadHistoryService 下载历史服务
     * @param majorService 专业服务
     * @return 下载历史列表
     */
    List<DownloadHistoryVO> getDownloadHistory(Integer id, LearningResourceService learningResourceService,
                                               DownloadHistoryService downloadHistoryService, MajorService majorService);
    
    /**
     * 根据历史记录列表获取资源列表
     * @param historyList 历史记录列表
     * @param service 学习资源服务
     * @return 专业名称映射
     */
    Map<Integer, String> getResourcesByHistoryList(List<? extends History> historyList, LearningResourceService service);
}